查看原文
其他

python标准库系列教程(五)——unittest单元测试(下篇)

草yang年华 机器学习与python集中营 2021-09-10

python进阶教程

机器学习

深度学习

长按二维码关注

进入正文


python标准库系列教程(五)——unittest库单元测试(下篇)





声明:前面的python标准库系列文章详细讲解了Python的三大函数式编程库以及集合库,itertools、functools、operators库以及collections库,本文继续python标准库系列文章,本文为第五篇,深入详解python的单元测试原理以及unittest的基本架构,鉴于篇幅较长,第五篇将分为几个小的篇章说明,本文为下篇,后续还会有系列文章更新,希望对小伙伴有所帮助!
通过系列文章的上篇、中篇已经详细讲解了TestCase、TestLoader、TestSuite、TextTestRunner、TextTestResult这些基本架构的使用方法,这篇文章将详细介绍python其他的一些单元测试框架,主要是简要介绍一下HTMLTestRunner的使用。


目录

一 HTMLTestRunner

   1.1 简单介绍

   1.2 简单安装

   1.3 简单实例

   1.4 运行结果

二 其他单元测试工具


01

HTMLTestRunner


   简单介绍    

上面的两篇文章介绍了如何输出单元测试的结果,以及如何将输出结果保存为文本文件,但是txt格式的文本执行报告过于简陋,这里我们学习一下借助HTMLTestRunner生成HTML报告。HTMLTestRunner是某位大神基于unittest进行拓展的,可以将单元测试结果以网页的形式加以呈现。
遗憾的是:HTMLTestRunner目前是只支持python2.x版本,所以本文的所有代码均是针对python2.7版本的。


    简单安装     

首先需要下载HTMLTestRunner.py,下载地址:

http://tungwaiyip.info/software/HTMLTestRunner.html

它其实就是一个很小的.py文件,自己下载即可,不支持pip安装。然后

并放到当前目录下,这是针对某一个项目的;如果想要一劳永逸,也可以把它放在python目录下的Lib中,这样所有的跑一趟宏代码都可以使用了,就可以导入运行了。


   简单实例     

首先定义一个需要测试的模块functions.py。该模块里面有四个加减乘除测试函数,代码如下:
def add(a, b):
    return a+b

def minus(a, b):
    return a-b

def multi(a, b):
    return a*b

def divide(a, b):
    return a/b

然后定义一个测试模块,其实HTMLTestRunner模块是对原生的unittest里面的TextTestRunner的改进,所以单元测试的步骤基本上是一样的,定义一个test.py文件,代码如下:

#_*_ coding:utf-8 _*_ 
from functions import * 
import unittest 
from HTMLTestRunner import HTMLTestRunner 
import sys 

class TestFunctions(unittest.TestCase): 

    def test_add(self):  #测试加法的方法 
        self.assertEqual(3, add(12)) 
        self.assertNotEqual(3, add(22)) 

    def test_minus(self): #测试减法的方法 
        self.assertEqual(1, minus(32)) 

    def test_multi(self): #测试乘法的方法 
        self.assertEqual(6, multi(23)) 

    def test_divide(self): #测试除法的方法 
        self.assertEqual(2, divide(63)) 
        self.assertEqual(2.5, divide(52)) 

if __name__ == '__main__':   
    #第一步:构建suite对象   
    suite = unittest.TestSuite()    

    #第二步:将需要测试的Case添加到suite里面,也可以使用TestLoader进行加载   
    tests = [TestFunctions("test_add"), TestFunctions("test_minus"), TestFunctions("test_divide"),TestFunctions('test_multi')]     
    suite.addTests(tests)     

    #第三步:创建runner,并且为runner制定需要写入的stream  
    with open('HTMLReport.html''wb'as f:         
        runner = HTMLTestRunner(stream=f, title = 'MathFunc Test Report', description='generated by HTMLTestRunner.',verbosity=2)         
        runner.run(suite)

注意:

上面的使用步骤仅仅是构建runner的不同,一个是使用TextTestRunner,一个是使用HTMLTestRunner.

上面的代码运行环境为python2.7



    运行结果    

首先需要下载HTMLTestRunner.py,下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
它其实就是一个很小的.py文件,自己下载即可,不支持pip安装。然后

并放到当前目录下,这是针对某一个项目的;如果想要一劳永逸,也可以把它放在python目录下的Lib中,这样所有的跑一趟宏代码都可以使用了,就可以导入运行了。


ok test_add (__main__.TestFunctions)
ok test_minus (__main__.TestFunctions)
F  test_divide (__main__.TestFunctions)
ok test_multi (__main__.TestFunctions)

Time Elapsed: 0:00:00.008000

即三个测试成功,一个失败了,然后我们可以打开所保存的HTMLReport.html文件,我们得到如下的结果,
上面通过表格的形式显示出来,一共测试4个,通过3个,失败一个,而且我们点开fail。可以查看具体失败的原因,点击fail,发现如下内容。

这是因为在python2中,除法/表示取整,%表示取余;

在python3中除法/表示真除法,而//表示取整,%表示取余。故而在python3中是通过的,在Python2中是不通过的。

总结:上面的网页展示相比较于单纯的文本表示,是不是美观方便很多?


02

其他单元测试工具


testtools 是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。由于在用法上 testtools 和 unittest 类似,所以本节简要介绍 testtols 的特点:

(1)Better assertion methods: 支持 assertIn, assertIs, assertIsInstance 等 assertion
(2)More debugging info: 更为详细的 debug 信息
    Extend unittest, but stay compatible and re-usable: 兼容 unittest
(3)Cross-Python compatibility: 支持多种 Python 版本 2.7, 3.3, 3.4, 3.5

关于该工具的详细使用这里就不再介绍了,有兴趣的小伙伴可以自己多学一下哦!那么到这里,python单元测试unittest系列文章也就结束了,后续还有其他系列文章,可以继续关注哦!



2019/01/11

Friday

小伙伴们,单元测试是任何编程语言都不可避免的哦,看完这篇文章你一定会有不一样的收获的,后面还有系列文章连载,请记得关注哦!如果你有需要,就添加我的公众号哦,里面分享有海量资源,包含各类数据、教程等,后面会有更多面经、资料、数据集等各类干货等着大家哦,重要的是全都是免费、无套路分享,有兴趣的小伙伴请持续关注!

推 荐 阅 读

python标准库系列教程(五)——unittest单元测试(上篇)

python标准库系列教程(五)——unittest单元测试(中篇)

python高级调试技巧(一)——原生态的pdb调试

python标准库系列教程(四)——collections库详细教程
python标准库系列教程(三)——operator库详细教程

python标准库系列教程(二)——functools (下篇)

python标准库系列教程(二)——functools (中篇)

python标准库系列教程(二)——functools (上篇)

python标准库系列教程(一)——itertools



赶紧关注我们吧

您的点赞和分享是我们进步的动力!

↘↘↘


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存